package Hot100;

/**
 * @author zhangmin
 * @create 2022-01-08 13:10
 */
public class maxProfit309 {
    /**
     * 309. 最佳买卖股票时机含冷冻期
     * 给定一个整数数组，其中第 i 个元素代表了第 i 天的股票价格 。​
     * 设计一个算法计算出最大利润。在满足以下约束条件下，你可以尽可能地完成更多的交易（多次买卖一支股票）:
     * 你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。卖出股票后，你无法在第二天买入股票 (即冷冻期为 1 天)。
     * dp[i][j]第i天是否持有股票的最大利润
     * dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
     * dp[i][1]=Math.max(dp[i-1][1],dp[i-2][0]-pri)
     * */
    public int maxProfit(int[] prices) {
        int n=prices.length;
        int[][] dp=new int[n][2];
        for (int i = 0; i < n; i++) {
            if (i==0){
                dp[i][0]=0;
                dp[i][1]=-prices[i];continue;
            }
            if (i==1){
                dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
                dp[i][1]=Math.max(dp[i-1][1],-prices[i]);
                continue;
            }
            dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
            dp[i][1]=Math.max(dp[i-1][1],dp[i-2][0]-prices[i]);
        }
        return dp[n-1][0];
    }
}
